package com.miyu.system.controller.data;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONReader;
import com.miyu.system.pojo.system.SysDict;
import com.miyu.system.pojo.system.SysDictDyna;
import com.miyu.system.pojo.system.SysDictItem;
import com.miyu.system.pojo.system.SysTable;
import com.miyu.system.service.data.SysDataService;
import com.miyu.system.utils.enumeration.R;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 系统数据控制器
 * 字典 +表数据
 * @author miyu
 */
@RestController
@RequestMapping("sys-data")
@RequiredArgsConstructor
public class SysDataController {
    private final SysDataService dataService;

    /**
     * 编辑系统dict
     *
     * @param param 参数
     * @return {@link JSONObject}
     */
    @RequestMapping("editSysDict")
    public JSONObject editSysDict(@RequestBody JSONObject param){
        return dataService.editSysDict(param);
    }

    /**
     * 查询系统字典
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("querySysDict")
    public Page<SysDict> querySysDict(@RequestBody JSONObject param){
        return dataService.querySysDict(param);
    }

    /**
     * 查询系统字典项目
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("querySysDictItem")
    public List<SysDictItem> querySysDictItem(@RequestBody SysDictItem param){
        return dataService.querySysDictItem(param);
    }


    /**
     * 查询系统字典明细 动态表
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("querySysDictDetail")
    public SysDictDyna querySysDictDetail(@RequestBody SysDictDyna param){
        return dataService.querySysDictDetail(param);
    }
    /**
     * 删除系统dict
     *
     * @param params 参数个数
     * @return {@link JSONObject}
     */
    @RequestMapping("delSysDict")
    public JSONObject delSysDict(@RequestBody JSONArray params){
        return dataService.delSysDict(params);
    }
    /**
     * 手动缓存系统字典
     * @return {@link JSONObject}
     */
    @RequestMapping("cacheSysDict")
    public JSONObject cacheSysDict(@RequestBody JSONArray params){
        List<SysDict> sysDictList=new ArrayList<SysDict>();
        if(params.size()>0){
            sysDictList = params.toJavaList(SysDict.class, JSONReader.Feature.IgnoreSetNullValue);
        }else {
           sysDictList = dataService.cacheSysDict();
        }
        for (SysDict sys : sysDictList) {
            //更新字典数据
            dataService.cacheDictItemByCode(sys.getDictCode());
        }
        return R.result("101");

    }

    /**
     * 根据字典编码 获取字典
     * @param itemCode 代码
     * @return {@link JSONArray}
     */
    @RequestMapping ("getDictItemByCode")
    public JSONArray getDictItemByCode(@RequestParam String itemCode){
        return dataService.getDictItemByCode(itemCode);    }

    /**
     * 获取表名字
     * @return {@link JSONArray}
     */
    @RequestMapping("getTableName")
    public JSONArray getTableName(){
        return dataService.getTableName();
    }

    /**
     * 获取表列
     * @return {@link JSONArray}
     */
    @RequestMapping("getTableColumnsByTable")
    public JSONArray getTableColumnsByTable(@RequestBody  JSONObject param){
        return dataService.getTableColumnsByTable(param);
    }

    /**
     * 系统表查询编辑
     * @param param 参数
     * @return {@link JSONObject}
     */
    @RequestMapping("sysTableEdit")
    public JSONObject sysTableEdit(@RequestBody JSONObject param){
        return dataService.sysTableEdit(param);
    }

    /**
     * 查询系统表
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("querySysTable")
    public Page<SysTable> querySysTable(@RequestBody JSONObject param){
        return dataService.querySysTable(param);
    }

    /**
     * 删除查询系统表
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("delSysTable")
    public JSONObject delSysTable(@RequestBody JSONArray param){
        return dataService.delSysTable(param);
    }

    /**
     * 查询系统表细节通过id
     * @param param 参数
     * @return {@link JSONArray}
     */
    @RequestMapping("sysTableDetail")
    public JSONArray querySysTableDetailById(@RequestBody JSONObject param){
        SysTable sysTable = JSONObject.parseObject(param.toString(),SysTable.class);
        return dataService.querySysTableDetail(sysTable);
    }

    /**
     * 查询系统表显示
     * @param param 参数
     * @return {@link JSONObject}
     */
    @RequestMapping("querySysTableShow")
    public JSONObject querySysTableShow(@RequestBody JSONObject param){
        return dataService.querySysTableShow(param);
    }

    /**
     * 查询rediskeys
     * @param param
     * @return
     */
    @RequestMapping("queryRedisKeys")
    public JSONArray queryRedisKeys(@RequestBody JSONObject param){
       return dataService.queryRedisKeys(param);
    }

    /**
     * 查询rediskeysbytype
     * @param param
     * @return
     */
    @RequestMapping("queryRedisKeysByType")
    public JSONArray queryRedisKeysByType(@RequestBody JSONObject param){
        return dataService.queryRedisKeysByType(param);
    }
}
